home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_56 / lines.asm < prev    next >
Assembly Source File  |  1995-01-01  |  3KB  |  138 lines

  1.  
  2. MODEL large,pascal
  3.  
  4. .DATA
  5. col       db (?)
  6. dabklein_ dw (?)
  7. extrn     drawseg:word
  8. ENDS
  9.  
  10. .CODE
  11. .386
  12.  
  13. ; think about to creat different parts for
  14. ;    1.  deltax>deltay
  15. ;    2.  deltax=deltay       <- that's important !
  16. ;    3.  deltax<deltay
  17. ; the result would be one memory acess less than before need in the drawloop
  18. ; and only two "j"umps and "cmp" at the beginning
  19. ; ist mir eben (29.4) noch eingefallen:
  20. ; weitere optimierung fuer seknrechte und waagerechte linien
  21.  
  22. PUBLIC linie
  23.  
  24. linie PROC NEAR x1:WORD,y1:WORD,x2:WORD,y2:WORD,farbe:BYTE
  25.       push   bp
  26.       mov    ax,drawseg
  27.       mov    es,ax
  28.       mov    al,farbe
  29.       mov    col,al
  30.       mov    di,x1
  31.       mov    si,x2
  32.       mov    cx,y1
  33.       mov    dx,y2
  34.       cmp    cx,dx
  35.       jle    l1
  36.       xchg   cx,dx
  37.       xchg   si,di
  38. l1:
  39.       cmp    di,si
  40.       jne    not_equal
  41.       cmp    cx,dx
  42.       jne    not_equal
  43.       mov    ax,cx
  44.       mov    dx,320
  45.       mul    dx
  46.       add    di,ax
  47.       mov    al,farbe
  48.       mov    es:[di],al
  49.       jmp    ende
  50. not_equal:
  51.       mov    ax,1                ; addx = 1
  52.  
  53.       sub    si,di
  54.       jg     dx_p
  55.       neg    ax                  ; addx = -1
  56.       neg    si
  57. dx_p:
  58.       sub    dx,cx               ; dx immer > cx
  59.       mov    bp,ax
  60.       push   dx
  61.       mov    ax,cx               ; ax = y1
  62.       mov    dx,320
  63.       mul    dx
  64.       add    di,ax               ; di beinhaltet Bildadresse vom 1.Punkt
  65.       pop    dx
  66.       cmp    si,dx
  67.       jge    dx_gr               ; Jump if dx>dy damit ax=x und y = 0 (x ist Laufvariable)
  68.       ;  dy>dx    ....... Y ist Laufvar
  69.       xchg   si,dx
  70.       mov    al,col
  71.       mov    cx,si               ; cx wird counter
  72.       shl    dx,1
  73.       mov    si,dx
  74.       sub    dx,cx
  75.       mov    bx,dx
  76.       sub    dx,cx
  77.       inc    cx
  78.       ; after this :
  79.       ;               dx = dabgross_add
  80.       ;               di = Pointposition
  81.       ;               bp = dabgross
  82.       ;               cx = Counter
  83.       ;               bx = akt_wert
  84.       ;               si = dabklein_add
  85.       ;               al = Farbe
  86.       ; look that is the lineroutine:      short is'nt it ? ;-)
  87.  
  88. l2:
  89.       mov    es:[di],al
  90.       add    di,320
  91.       cmp    bx,0
  92.       jge    l4
  93.       add    bx,si
  94.       loop   l2
  95.       jmp    ende
  96. l4:
  97.       add    di,bp
  98.       add    bx,dx
  99.       loop   l2
  100.       jmp    ende
  101. dx_gr: ; X ist Laufvariable
  102.       mov    al,col
  103.       mov    cx,si               ; cx wird counter
  104.       shl    dx,1
  105.       mov    si,dx
  106.       sub    dx,cx
  107.       mov    bx,dx
  108.       sub    dx,cx
  109.       inc    cx
  110.       ; after this :
  111.       ;               dx = dabgross_add
  112.       ;               di = Pointposition
  113.       ;               bp = dabgross
  114.       ;               dabklein - in Dataseg
  115.       ;               cx = Counter
  116.       ;               bx = akt_wert
  117.       ;               si = dabklein_add
  118.       ;               al = Farbe
  119.       ; look that is the lineroutine:      short is'nt it ? ;-)
  120.  
  121. sl:
  122.       mov    es:[di],al
  123.       add    di,bp
  124.       cmp    bx,0
  125.       jge    dabgr
  126.       add    bx,si
  127.       loop   sl
  128.       jmp    ende
  129. dabgr:
  130.       add    di,320
  131.       add    bx,dx
  132.       loop   sl
  133. ende:
  134.       pop    bp
  135.       ret
  136. linie ENDP
  137.  
  138. end